/** 
* Projet AP5 - Agenda PDA
* ContactCtrl.java
*/

package pda.control;
 
import pda.view.ContactViewer;
import pda.datas.ContactEngine;
import pda.datas.Contact;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Enumeration;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.DefaultListModel;
 
/**
* Reaction au clic pour l'application contact 
*/

public class ContactCtrl extends MouseAdapter implements IApplication, ActionListener {

//##########################################################################################################
//										Attributs
//##########################################################################################################
	/** Chaine de caractère du nom */
	private String name;

	/** L'Objet de vue de la classe ContactViewer  */
	private ContactViewer view;

	/** L'Objet de la classe ContactEngine   */
	private ContactEngine engine;

	/** Chaine de caractère de selection */
	private String select;
	

//##########################################################################################################
//										Constructeur
//##########################################################################################################

	/**
	* The constructor of the class
	*/
	public ContactCtrl () {
	    engine = new ContactEngine();
	    view = new ContactViewer ( engine, this );
		engine.load();
		this.initListe();
	}

//##########################################################################################################
//										Methodes
//##########################################################################################################


	public void actionPerformed ( ActionEvent e ) {
		String source = e.getActionCommand();
		
		if (source.equals("addOk")){
			if ( view.getNom().length() != 0 && view.getPrenom().length() != 0 && view.getTel().length() != 0 && !engine.existe(view.getNom()+", "+view.getPrenom())){
				//ajout en dure dans les datas
				engine.ajouter(view.getNom()+", "+view.getPrenom(), new Contact (view.getNom(), view.getPrenom(), view.getTel()));
				//ajout dans la vue
				view.ajouter (view.getNom()+", "+view.getPrenom());
				//retour a l'accueil
				view.initHome();
			}
			engine.save();
			select = null;
		
		}else if (source.equals("editOk")){
			//modif en dure dans les datas
			engine.modifier(view.getNom()+", "+view.getPrenom(), new Contact( view.getNom(), view.getPrenom(), view.getTel()));
			//suppr dans la vue puis rajout
			
			//retour a l'accueil
			view.initHome();
			engine.save();
		}else if (source.equals("del")){
			if (select != null){
				//delete dans la vue
				((DefaultListModel)view.getListe().getModel()).removeElement (select);
				//suppression dans le dure datas
				engine.supprimer(select); 
				engine.save();
			}
		}else if (source.equals("add")){
			view.ajout();
		}else if (source.equals("edit")){
			if (select != null){
				Contact leContact = engine.consulter(select);
				view.edition(leContact);
			}
			select = null ;
		}else if (source.equals("cancel")){
			view.initHome();
		}
		
	}



	public void mouseClicked ( MouseEvent e ) {
		try {
			int index = view.getListe().locationToIndex(e.getPoint());
			DefaultListModel tab = (DefaultListModel)( view.getListe().getModel());
			String cle = (String)tab.get(index);
			select = cle ;
		}catch (ArrayIndexOutOfBoundsException exc){
			System.out.println(exc.getMessage());
		}
	}
	
	/**
	* 
	*/
	public void initListe(){
		Enumeration<String> cles = engine.getKey();
		while (cles.hasMoreElements()){
			String nom = cles.nextElement();
			view.ajouter(nom);
		}
	}


	/**
	* 
	*/
	public void removeString(String nom) {
		((DefaultListModel)view.getListe().getModel()).removeElement(nom);
		select = null;
	}

	/**
	*
	*/
	public void addString(String nom){
		((DefaultListModel)view.getListe().getModel()).addElement(nom);
		select = null;
	}
	


	/**
	* Demarre l'application
	* @param pda 
	*/
	public void start ( PdaCtrl pda ) {
       	System.out.println ( "Start of Contact application" );
   	} // -------------------------------------------------------------- start()

	/**
	* Ferme l'application
	*/
	public boolean close() {
		return true;
	} //--------------------------------------------------------------- close()

	/**
	* Modifie le nom de l'application
	* @param theName le nom à donner
	*/
	public void setAppliName ( String theName ) {
		this.name = theName;
	}


//##########################################################################################################
//										Methodes Get
//##########################################################################################################
	/**
	* Retourne le panel de la liste 
	* @return le panel
	*/
	public JScrollPane getPanelListe(){
		return view.getPanelListe();
	}
	
    	/**
	* Retourne le nom de l'application
	* @return le nom
	*/
	public String getAppliName() {
		return name;
	}
    	
	/**
	* Retourne le panel de l'application
	* @return le panel
	*/
	public JPanel getAppliPanel() {
		return view.getPanel();
	}

	/**
	* Retourne la selection
	* @return la selection
	*/
	public String getSelect(){ return select ; }


    
}
